Méthode de Monte-Carlo

Modifié par Clemni

On suppose que l’on souhaite intégrer une fonction  \(f\) continue et positive sur un intervalle \([a;b]\)

Le principe de l'algorithme de Monte-Carlo est le suivant : on prend un point au hasard dans le plan et on regarde si celui-ci est au-dessus ou en dessous de la courbe représentative de la fonction \(f\) . On compte alors la proportion de points sous la courbe parmi ceux tirés au hasard et on utilise cette proportion pour estimer l’intégrale de  \(f\) entre  \(a\) et \(b\) .

On note  \(M\) le maximum de notre fonction sur cet intervalle (celui-ci existe bel et bien, en vertu du théorème de Weierstrass que vous rencontrerez lors de vos études supérieures). Si l’on ne parvient pas à le déterminer directement, on peut tout aussi bien se contenter d’un majorant.

On initialise un compteur  \(C\) à 0, puis on recommence les étapes suivantes  \(n\) fois.

  • On choisit alors un réel au hasard et de manière uniforme sur l’intervalle \([a;b]\) : on note  \(x\) ce réel. Le programme ne parle pas de telles lois de probabilités sur des espaces continus, mais nous laisserons Python s’en charger pour nous.
  • On choisit un autre réel  \(y\) au hasard, de manière uniforme et indépendante du premier réel sur l’intervalle \([0;M]\) .
  • Si  \(y, on incrémente le compteur  \(C\) de 1. Sinon, on ne fait rien.
  • On renvoie alors la valeur \(\dfrac{C}{n} \times M \times (b-a)\) .

Exercice

1. Expliquer pourquoi la valeur utilisée pour estimer l'intégrale est \(\dfrac{C}{n} \times M \times (b-a)\) .

2. Implémenter l'algorithme précédent à l'aide de la fonction suivante.

La fonction uniform permet de choisir un nombre aléatoire de manière uniforme.

3. Utiliser alors cet algorithme pour estimer l'intégrale entre `-1` et `1` de la fonction  \(f\) définie par \(f(x)=2\sqrt{1-x^2}\)  (on admettra que cette fonction est majorée par 2). Quelle valeur semble-t-on retrouver ?

from random import uniform
from math import sqrt

def f(x) :
    return ...

def montecarlo(f, a, b, M, n):
    '''Estime l'intégrale de f entre a et b à l'aide de la méthode de Monte-Carlo
    --------
    Entrées : 
    f : une fonction continue et positive sur [a,b]
    a : borne inférieure de l'intervalle d'intégration
    b : borne supérieure de l'intervalle d'intégration
    M : maximum ou majorant de la fonction
    n : nombre de points à tirer au hasard
    '''
    C = ...
    for i in range(n):
        x = uniform(a,b)
        y = uniform(0,M)
        if ... :
            C = C + 1
    return ...

Source : https://lesmanuelslibres.region-academique-idf.fr
Télécharger le manuel : https://forge.apps.education.fr/drane-ile-de-france/les-manuels-libres/mathematiques-terminale-specialite ou directement le fichier ZIP
Sous réserve des droits de propriété intellectuelle de tiers, les contenus de ce site sont proposés dans le cadre du droit Français sous licence CC BY-NC-SA 4.0